package com.example.lib_cache.dao;

import androidx.lifecycle.LiveData;
import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.OnConflictStrategy;
import androidx.room.Query;
import androidx.room.Update;

import com.example.lib_cache.model.User;

import java.util.List;

/**
 * Created by 张柱 on 2022/4/11
 */

@Dao
public interface UserDao {
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertAll(User... users);

    //2.)常规查询操作，此时还是需要你写sql语句的
    @Query("SELECT * FROM tb_user WHERE u_id IN (:userIds)")
    List<User> loadAllByIds(int[] userIds);

    //3.) 高级查询操作，可以通过livedata 以观察者的形式获取数据库数据，可以避免不必要的npe
    //更重要的是 他可以监听数据库表中的数据的比变化。一旦发生了 insert update delete。
    //room会自动读取表中最新的数据，发送给UI层 刷新页面
    //这一点是我们着重要关注的，看它背后有什么骚操作。
    @Query("SELECT * FROM tb_user")
    LiveData<List<User>> getAll();

    //4.）删除操作非常简单 ，也可以执行sql的删除数据
    @Delete
    void delete(User user);


    @Update
    void update(User user);
}
